/**
 * 图表工具函数
 * 提供通用的图表监听容器变化和数据更新的方法
 */

/**
 * 监听图表容器尺寸变化
 * @param {Object} chartContainer - 图表容器DOM引用
 * @param {Object} chartInstance - 图表实例
 * @param {Object} resizeObserver - ResizeObserver引用
 * @returns {Object} - 返回ResizeObserver实例
 */
export function observeChartResize(chartContainer, chartInstance, resizeObserver) {
	if (!chartContainer) return null

	// 如果已经有ResizeObserver实例，先断开连接
	if (resizeObserver) {
		resizeObserver.disconnect()
	}

	// 创建新的ResizeObserver实例
	const observer = new ResizeObserver(() => {
		handleChartResize(chartInstance)
	})

	// 开始观察容器尺寸变化
	observer.observe(chartContainer)

	return observer
}

/**
 * 处理图表尺寸变化
 * @param {Object} chartInstance - 图表实例
 */
export function handleChartResize(chartInstance) {
	if (!chartInstance) return

	try {
		// 尝试使用resize方法
		if (typeof chartInstance.resize === 'function') {
			chartInstance.resize()
		}
		// 尝试使用内部chart对象的resize方法
		else if (chartInstance.chart && typeof chartInstance.chart.resize === 'function') {
			chartInstance.chart.resize()
		}
		// 如果都不存在，尝试重新渲染
		else {
			chartInstance.render()
		}
	} catch (error) {
		console.error('图表重新渲染失败:', error)
	}
}

/**
 * 更新图表数据和配置
 * @param {Object} chartInstance - 图表实例
 * @param {Object} options - 图表配置选项
 */
export function updateChart(chartInstance, options) {
	if (!chartInstance) return

	try {
		chartInstance.update(options)
	} catch (error) {
		console.error('图表更新失败:', error)

		// 如果更新失败，尝试重新渲染
		try {
			chartInstance.render()
		} catch (renderError) {
			console.error('图表重新渲染也失败:', renderError)
		}
	}
}

/**
 * 清理图表资源
 * @param {Object} chartInstance - 图表实例
 * @param {Object} resizeObserver - ResizeObserver实例
 */
export function cleanupChart(chartInstance, resizeObserver) {
	// 销毁图表实例
	if (chartInstance) {
		try {
			chartInstance.destroy()
		} catch (error) {
			console.error('图表销毁失败:', error)
		}
	}

	// 清理ResizeObserver
	if (resizeObserver) {
		resizeObserver.disconnect()
	}
}
